package ru.lukyanets.transmission.protocol.model.session;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Getter;
import lombok.Setter;

/**
 * @author slukyanets
 */
@SuppressWarnings("unused")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({
        "alt-speed-down",
        "alt-speed-enabled",
        "alt-speed-time-begin",
        "alt-speed-time-day",
        "alt-speed-time-enabled",
        "alt-speed-time-end",
        "alt-speed-up",
        "blocklist-enabled",
        "blocklist-size",
        "blocklist-url",
        "cache-size-mb",
        "config-dir",
        "dht-enabled",
        "download-dir",
        "download-dir-free-space",
        "download-queue-enabled",
        "download-queue-size",
        "encryption",
        "idle-seeding-limit",
        "idle-seeding-limit-enabled",
        "incomplete-dir",
        "incomplete-dir-enabled",
        "lpd-enabled",
        "peer-limit-global",
        "peer-limit-per-torrent",
        "peer-port",
        "peer-port-random-on-start",
        "pex-enabled",
        "piece-temp-dir",
        "port-forwarding-enabled",
        "queue-stalled-enabled",
        "queue-stalled-minutes",
        "rename-partial-files",
        "rpc-version",
        "rpc-version-minimum",
        "script-torrent-done-enabled",
        "script-torrent-done-filename",
        "seed-queue-enabled",
        "seed-queue-size",
        "seedRatioLimit",
        "seedRatioLimited",
        "speed-limit-down",
        "speed-limit-down-enabled",
        "speed-limit-up",
        "speed-limit-up-enabled",
        "start-added-torrents",
        "trash-original-torrent-files",
        "units",
        "utp-enabled",
        "version"
})
@Getter
@Setter
public class Session {
    @JsonProperty("alt-speed-down")
    private int altSpeedDown;
    @JsonProperty("alt-speed-enabled")
    private boolean altSpeedEnabled;
    @JsonProperty("alt-speed-time-begin")
    private int altSpeedTimeBegin;
    @JsonProperty("alt-speed-time-day")
    private int altSpeedTimeDay;
    @JsonProperty("alt-speed-time-enabled")
    private boolean altSpeedTimeEnabled;
    @JsonProperty("alt-speed-time-end")
    private int altSpeedTimeEnd;
    @JsonProperty("alt-speed-up")
    private int altSpeedUp;
    @JsonProperty("blocklist-enabled")
    private boolean blocklistEnabled;
    @JsonProperty("blocklist-size")
    private int blocklistSize;
    @JsonProperty("blocklist-url")
    private String blocklistUrl;
    @JsonProperty("cache-size-mb")
    private int cacheSizeMb;
    @JsonProperty("config-dir")
    private String configDir;
    @JsonProperty("dht-enabled")
    private boolean dhtEnabled;
    @JsonProperty("download-dir")
    private String downloadDir;
    @JsonProperty("download-dir-free-space")
    private long downloadDirFreeSpace;
    @JsonProperty("download-queue-enabled")
    private boolean downloadQueueEnabled;
    @JsonProperty("download-queue-size")
    private int downloadQueueSize;
    @JsonProperty("encryption")
    private String encryption;
    @JsonProperty("idle-seeding-limit")
    private int idleSeedingLimit;
    @JsonProperty("idle-seeding-limit-enabled")
    private boolean idleSeedingLimitEnabled;
    @JsonProperty("incomplete-dir")
    private String incompleteDir;
    @JsonProperty("incomplete-dir-enabled")
    private boolean incompleteDirEnabled;
    @JsonProperty("lpd-enabled")
    private boolean lpdEnabled;
    @JsonProperty("peer-limit-global")
    private int peerLimitGlobal;
    @JsonProperty("peer-limit-per-torrent")
    private int peerLimitPerTorrent;
    @JsonProperty("peer-port")
    private int peerPort;
    @JsonProperty("peer-port-random-on-start")
    private boolean peerPortRandomOnStart;
    @JsonProperty("pex-enabled")
    private boolean pexEnabled;
    @JsonProperty("piece-temp-dir")
    private String pieceTempDir;
    @JsonProperty("port-forwarding-enabled")
    private boolean portForwardingEnabled;
    @JsonProperty("queue-stalled-enabled")
    private boolean queueStalledEnabled;
    @JsonProperty("queue-stalled-minutes")
    private int queueStalledMinutes;
    @JsonProperty("rename-partial-files")
    private boolean renamePartialFiles;
    @JsonProperty("rpc-version")
    private int rpcVersion;
    @JsonProperty("rpc-version-minimum")
    private int rpcVersionMinimum;
    @JsonProperty("script-torrent-done-enabled")
    private boolean scriptTorrentDoneEnabled;
    @JsonProperty("script-torrent-done-filename")
    private String scriptTorrentDoneFilename;
    @JsonProperty("seed-queue-enabled")
    private boolean seedQueueEnabled;
    @JsonProperty("seed-queue-size")
    private int seedQueueSize;
    @JsonProperty("seedRatioLimit")
    private int seedRatioLimit;
    @JsonProperty("seedRatioLimited")
    private boolean seedRatioLimited;
    @JsonProperty("speed-limit-down")
    private int speedLimitDown;
    @JsonProperty("speed-limit-down-enabled")
    private boolean speedLimitDownEnabled;
    @JsonProperty("speed-limit-up")
    private int speedLimitUp;
    @JsonProperty("speed-limit-up-enabled")
    private boolean speedLimitUpEnabled;
    @JsonProperty("start-added-torrents")
    private boolean startAddedTorrents;
    @JsonProperty("trash-original-torrent-files")
    private boolean trashOriginalTorrentFiles;
    @JsonProperty("units")
    private Units units;
    @JsonProperty("utp-enabled")
    private boolean utpEnabled;
    @JsonProperty("version")
    private String version;
}
